package com.whfc.fmam.service;

import com.whfc.common.exception.BizException;
import com.whfc.common.result.PageData;
import com.whfc.fmam.entity.dto.FmamPlanDTO;
import com.whfc.fmam.entity.dto.FmamPlanListCountDTO;
import com.whfc.fmam.entity.qo.FmamPlanAddQO;
import com.whfc.fmam.entity.qo.FmamPlanCheckQO;
import com.whfc.fmam.entity.qo.FmamPlanEditQO;

import java.util.Date;
import java.util.List;

/**
 * @author likang
 * @description 材料审批
 */
public interface FmamPlanService {

    /**
     * 查找材料计划列表
     *
     * @param userId    用户ID
     * @param deptId    组织机构ID
     * @param pageNum   页码
     * @param pageSize  每页
     * @param states    计划状态
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 计划列表
     * @throws BizException 业务异常
     */
    PageData<FmamPlanDTO> list(Integer userId, Integer deptId, Integer pageNum, Integer pageSize, List<Integer> states, Date startDate, Date endDate) throws BizException;

    /**
     * 材料计划列表统计
     *
     * @param userId    用户ID
     * @param deptId    组织机构ID
     * @param states    计划状态
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 统计数量
     * @throws BizException 业务异常
     */
    @Deprecated
    Integer planListCount(Integer userId, Integer deptId, List<Integer> states, Date startDate, Date endDate) throws BizException;


    /**
     * 材料计划列表统计
     *
     * @param userId
     * @param deptId
     * @param startDate
     * @param endDate
     * @return
     * @throws BizException
     */
    FmamPlanListCountDTO planListCount(Integer userId, Integer deptId, Date startDate, Date endDate) throws BizException;

    /**
     * 材料计划详情
     */
    FmamPlanDTO detail(Integer planId) throws BizException;

    /**
     * 提交材料计划
     */
    void add(FmamPlanAddQO param) throws BizException;

    /**
     * 编辑材料计划
     */
    void edit(FmamPlanEditQO param) throws BizException;

    /**
     * 删除材料计划
     */
    void del(Integer planId) throws BizException;

    /**
     * 材料计划审批流程
     */
    @Deprecated
    void checkPlan(FmamPlanCheckQO param) throws BizException;

    /**
     * 审批
     *
     * @param param
     * @throws BizException
     */
    void check1(FmamPlanCheckQO param) throws BizException;

    /**
     * 复审
     *
     * @param param
     * @throws BizException
     */
    void check2(FmamPlanCheckQO param) throws BizException;

    /**
     * 核验
     *
     * @param param
     * @throws BizException
     */
    void check3(FmamPlanCheckQO param) throws BizException;
}
